#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

struct SqStack{     // 顺序栈(假定栈的数据元素类型为int)
    int* base;      // 栈底的指针(数组的地址, base一般是不用修改的)
    int* top;       // 栈顶的指针（指向栈顶元素的上面的那个空的位置）
    int stackSize;  // 栈的容量（数组的大小）
    bool init(){
        stackSize = 10000;                // 栈大小的默认值
        base = new int[stackSize];      // 申请数组空间
        top = base;                     // 空栈
    }
    bool isEmpty() { return top == base; }
    bool isFull() { return top - base == stackSize; }
    bool push(int e){
        if(isFull()) return false;
        *top = e;       // 把新元素e压入栈中
        top++;          // 更新栈顶元素
    }
    bool pop(int &e){
        if(isEmpty()) return false;
        top--;
        e = *top;
    }
    bool peek(int &e) {
        if(isEmpty()) return false;
        e = *(top - 1);
    }
    void print(){
        cout << "Base ==> [";
        for(int i = 0, len = top - base; i < len; i++){
            cout << base[i] << ", ";
        }
        cout << "] <== Top\n";
    }

};

int main()
{    
    SqStack myStack;    // 定义一个栈的变量
    int startTime = clock();
    for(int i = 0; i < 100000; i++){
        myStack.init();
        for(int j = 0; j < 10000; j++)
            myStack.push(j);
        int ele;
        for(int j = 0; j < 10000; j++)
            myStack.pop(ele);
    }
    int endTime = clock();
    double time = double(endTime-startTime)/CLOCKS_PER_SEC;
    cout << "10000 times 10000 push and 10000 pop: " << time << "s\n"; 
       
    return 0;
}